package com.demo.cn.tubiao;

import android.graphics.Color;
import android.graphics.Matrix;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import butterknife.ButterKnife;
import butterknife.InjectView;

public class MainActivity extends AppCompatActivity {

    @InjectView(R.id.linechart)
    LineChart linechart;
    private String mMoveColor = "#62d3a2";
    private String mKdColor = "#ff9c52";
    private String mWhiteColor = "#FFFFFF";
    private ArrayList<Entry> pointValuesYd;
    private ArrayList<Entry> pointValuesKd;
    private Integer[] date1 = new Integer[]{50, 80, 100,60,50,50, 80, 100,60,50};
    private Integer[] date2 = new Integer[]{-80,-50,-100,-20,-80,-80,-50,-100,-20,-80};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
        initChart();
        initData();
        initShowLine();

    }

    private void initShowLine() {
        //点构成的某条线
        LineDataSet lineDataSetYd = new LineDataSet(pointValuesYd, "");
        LineDataSet lineDataSetKd = new LineDataSet(pointValuesKd, "");
        //设置该线的颜色
        lineDataSetYd.setColor(Color.parseColor(mMoveColor));
        lineDataSetKd.setColor(Color.parseColor(mKdColor));
        //设置每个点的颜色
        lineDataSetYd.setCircleColor(Color.parseColor(mMoveColor));
        lineDataSetKd.setCircleColor(Color.parseColor(mKdColor));
        //设置该线的宽度
//        lineDataSet.setLineWidth(1f);
//        设置每个坐标点的圆大小
        lineDataSetYd.setCircleRadius(3f);
        lineDataSetKd.setCircleRadius(3f);
        lineDataSetYd.setCircleHoleColor(Color.parseColor(mWhiteColor));
        lineDataSetKd.setCircleHoleColor(Color.parseColor(mWhiteColor));
        //设置是否画圆
        lineDataSetYd.setDrawCircles(true);
        lineDataSetKd.setDrawCircles(true);
        // 设置平滑曲线模式
        lineDataSetYd.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        lineDataSetKd.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        //设置线一面部分是否填充颜色
        lineDataSetYd.setDrawFilled(true);
        lineDataSetKd.setDrawFilled(true);
        //设置填充的颜色
//        lineDataSet.setFillColor(bg);
        if (Build.VERSION.SDK_INT > 17) {
            lineDataSetYd.setFillDrawable(getResources().getDrawable(R.drawable.linegrad));
            lineDataSetKd.setFillDrawable(getResources().getDrawable(R.drawable.linegrad1));
        }
        //设置是否显示点的坐标值
        lineDataSetYd.setDrawValues(false);
        lineDataSetKd.setDrawValues(false);

        //线的集合（可单条或多条线）
        List<ILineDataSet> dataSets = new ArrayList<>();
        dataSets.add(lineDataSetYd);
        dataSets.add(lineDataSetKd);
        //把要画的所有线(线的集合)添加到LineData里
        LineData lineData = new LineData(dataSets);
        lineData.setHighlightEnabled(true);

        //把最终的数据setData
        linechart.setData(lineData);
        linechart.invalidate();
    }

    //设置chart基本属性
    private void initChart() {
        linechart.setScaleMinima(1.0f, 1.0f);
        linechart.getViewPortHandler().refresh(new Matrix(), linechart, true);
        //设置描述信息
        linechart.setDescription(null);
        //设置没有数据时显示的文本
        linechart.setNoDataText("没有数据喔~~");
        //设置是否绘制chart边框的线
        linechart.setDrawBorders(true);
        //设置chart边框线颜色
        linechart.setBorderColor(Color.GRAY);
        //设置chart边框线宽度
        linechart.setBorderWidth(1f);
        //设置chart是否可以触摸
        linechart.setTouchEnabled(true);
        //设置是否可以拖拽
        linechart.setDragEnabled(true);
        linechart.setClickable(true);
        linechart.setDrawMarkers(true);
        //设置是否可以缩放 x和y，默认true
        linechart.setScaleEnabled(false);
        //设置是否可以通过双击屏幕放大图表。默认是true
//        //设置一页最大显示个数为7，超出部分就滑动
        float ratio = (float) date1.length/ (float) 7;
//////        显示的时候是按照多大的比率缩放显示,1f表示不放大缩小
        linechart.zoom(ratio, 1f, 0, 0);


        linechart.setDoubleTapToZoomEnabled(false);
        //设置chart动画
        linechart.animateXY(1000, 1000);
        MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);

        // Set the marker to the chart
        linechart.setMarker(mv);







        //=========================设置图例=========================
        // 像"□ xxx"就是图例
        Legend legend = linechart.getLegend();
        //设置图例显示在chart那个位置 setPosition建议放弃使用了
        //设置垂直方向上还是下或中
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        //设置水平方向是左边还是右边或中
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        //设置所有图例位置排序方向
        legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        //设置图例的形状 有圆形、正方形、线
        legend.setForm(Legend.LegendForm.CIRCLE);
        //是否支持自动换行 目前只支持BelowChartLeft, BelowChartRight, BelowChartCenter
        legend.setWordWrapEnabled(true);
        legend.setEnabled(false);

        //=======================设置X轴显示效果==================

        final XAxis xAxis = linechart.getXAxis();
        xAxis.enableGridDashedLine(10f, 10f, 0f);
        xAxis.setGridColor(Color.GRAY);
        xAxis.setGridLineWidth(0.5f);
//        xAxis.enableGridDashedLine(10f, 10f, 0f);
        //是否启用X轴
        xAxis.setEnabled(true);
        //是否绘制X轴线
        xAxis.setDrawAxisLine(false);
        //设置X轴上每个竖线是否显示
        xAxis.setDrawGridLines(false);
        //设置是否绘制X轴上的对应值(标签)
        xAxis.setDrawLabels(true);
        xAxis.setCenterAxisLabels(false);
        //设置X轴显示位置
        xAxis.setPosition(XAxis.XAxisPosition.CENTER);
//        xAxis.setPosition(XAxis.XAxisPosition.TOP);
        //设置竖线为虚线样式
         xAxis.enableGridDashedLine(10f, 10f, 0f);
        //设置x轴标签数
            xAxis.setLabelCount(7, true);

        xAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getAxisLabel(float value, AxisBase axis) {
                System.err.println(value + "---value----");
//
                if ((int) value < pointValuesYd.size()) {
                    return "上海";
                } else {
                    return "";
                }
            }
        });
//
//        xAxis.setValueFormatter(new IAxisValueFormatter() {
//            @Override
//            public String getFormattedValue(float value, AxisBase axis) {
//                System.err.println(value + "---value----");
//
//                if ((int) value < pointValuesYd.size()) {
//                    return "上海";
//                } else {
//                    return "";
//                }

//                int index = (int) value;
//                if (index < 0 || index >= tempmListYd.size()) {
//                    return "";
//                } else {
//                    return tempmListYd.get(index).getDATE();
//                }
//            }
//        });


        //图表第一个和最后一个label数据不超出左边和右边的Y轴
        // xAxis.setAvoidFirstLastClipping(true);

        //设置限制线 12代表某个该轴某个值，也就是要画到该轴某个值上
//        LimitLine limitLine = new LimitLine(12);
        //设置限制线的宽
//        limitLine.setLineWidth(1f);
        //设置限制线的颜色
//        limitLine.setLineColor(Color.RED);
        //设置基线的位置
//        limitLine.setLabelPosition(LimitLine.LimitLabelPosition.LEFT_TOP);
//        limitLine.setLabel("马丹我是基线，也可以叫我水位线");
        //设置限制线为虚线
//        limitLine.enableDashedLine(10f, 10f, 0f);
        //左边Y轴添加限制线
//        YAxis axisLeft1 = linechart.getAxisLeft();
//        axisLeft1.addLimitLine(limitLine);

        //=================设置左边Y轴===============
//        YAxis axisLeft = linechart.getAxisLeft();
//
////        axisLeft.setAxisMaximum(20f);
//        //左侧Y轴最小值
//        axisLeft.setAxisMinimum(0f);
//        //是否绘制Y轴网格线
////        axisLeft.setDrawGridLines(false);
////        axisLeft.setGranularityEnabled(true);
//        //是否启用左边Y轴
//        axisLeft.setEnabled(true);
//        //设置最小值（这里就按demo里固死的写）
////        axisLeft.setAxisMinimum(1);
//        //设置最大值（这里就按demo里固死的写了）
////        axisLeft.setAxisMaximum(20);
//        //设置横向的线为虚线
//        axisLeft.enableGridDashedLine(10f, 10f, 0f);
//        axisLeft.setDrawLimitLinesBehindData(true);


        //====================设置右边的Y轴===============
        YAxis axisRight = linechart.getAxisRight();
        //是否启用右边Y轴
//        axisRight.setEnabled(true);
        //设置最小值（这里按demo里的数据固死写了）
//        axisRight.setAxisMaximum(100f);
        axisRight.setDrawZeroLine(false);
//        axisRight.setAxisMinimum(-100f);
        axisRight.setLabelCount(5, true);
        axisRight.setAxisLineColor(Color.WHITE); //设置Y轴颜色
//        axisRight.setSpaceBottom(0);
//        axisRight.setSpaceTop(0);
//        axisRight.setGranularityEnabled(true);

        axisRight.setValueFormatter(new ValueFormatter() {
            @Override
            public String getAxisLabel(float value, AxisBase axis) {
                if ((int) Math.abs(value) == 0) {
                    return String.valueOf("   "+0);
                } else {
                    return String.valueOf((int)Math.abs(value));
                }

            }
        });



//        axisRight.setValueFormatter(new IAxisValueFormatter() {
//            @Override
//            public String getFormattedValue(float value, AxisBase axisBase) {
//                return String.valueOf((int)Math.abs(value));
//            }
//        });


//        axisRight.enableGridDashedLine(10f, 10f, 0f);

        //背景颜色
        linechart.setBackgroundColor(Color.WHITE);
        //网格
        linechart.setDrawGridBackground(false);
        linechart.getAxisLeft().setEnabled(false);
        linechart.getAxisRight().setEnabled(true);
        linechart.setDrawBorders(false);

    }

    //设置数据
    private void initData() {
        //每个点的坐标,自己随便搞点（x,y）坐标就可以了

        pointValuesYd = new ArrayList<>();
        pointValuesKd = new ArrayList<>();
        List<Integer> d1 = Arrays.asList(date1);
        List<Integer> d2 = Arrays.asList(date2);


        for (int i = 0; i < d1.size(); i++) {
            pointValuesYd.add(new Entry(i, Float.parseFloat(String.valueOf(d1.get(i)))));
        }
        for (int i = 0; i < d2.size(); i++) {
            pointValuesKd.add(new Entry(i, Float.parseFloat(String.valueOf(d2.get(i)))));
        }
    }
}
